/**
 * cookies,session storage,loacl storage
 * 目的 是 查找session ,在 任意环节找到，即可返回，
 * 并且重新设置一次所有值，以防止有部分删除
 */
import Cookies from 'js-cookie'

const SESSION_KEY = 'sess'

class SessionService {
  constructor(){
    this._session = null

  }
  get session(){
    this._getSess()
    return this._session
  }
  set session(sess){
    if(typeof sess === 'string')
      this._save(sess)
    else
      this._save(JSON.stringify(sess))
  }
  /**
   * 报错所有可能
   * @private
   */
  _save(sess){
    // 先转换成session
    let sessVal = null // 必须string

    if(typeof sess === 'string') {
      sessVal = sess
      this._session = JSON.parse(sess)
    }else {
      sessVal = JSON.stringify(sess)
      this._session = sess
    }
    // 保存
    // session storage
    sessionStorage.setItem(SESSION_KEY,sessVal)
    // local storage
    localStorage.setItem(SESSION_KEY,sessVal)
    // cookies
    Cookies.set(SESSION_KEY,sessVal,{ expires:365 })
    // flash
  }

  /**
   * 从可能的地方获取session
   * @private
   */
  _getSess(){
    // session storage
    if(sessionStorage){
      let sess = sessionStorage.getItem(SESSION_KEY)
      if(sess){
        this._save(sess)
        return
      }
    }
    // local storage
    if(localStorage){
      let sess = localStorage.getItem(SESSION_KEY)
      if(sess){
        this._save(sess)
        return
      }
    }
    // cookies
    let sess = Cookies.get(SESSION_KEY)
    if(sess){
      this._save(sess)
      return
    }
    // flash
  }
}

export default new SessionService()
